<?php
  /**
   * @author EVANDRO DE OLIVEIRA.
   * @category CONTROLLER
   * @package CONTROLLERS.
   * @since 05/05/2012.
   * @last_update 05/05/2012.
   * @copyright 2012.
   * @version 1.0.
   *
   */
  class CidadesController extends Zend_Controller_Action{
    /**
     * Inicializa a controller, fazendo todas as verificações definidas.
     */
    public function init(){
      $objAuthNamespace = new Zend_Session_Namespace('Zend_Auth');
      
      if(!$objAuthNamespace->session_initialized){
        $this->_redirect('/account/login');
      } 
      
      $this->strTitleP = 'CIDADES';
      $this->strTitleS = 'Cidade';
    }
    
    /**
     * Action padrão da controller
     */
    public function indexAction(){
      $this->_redirect('cidades/list');
    }
    
    /**
     * Action que listará todos as cidade existentes.
     */
    public function listAction(){
      $this->view->strTitleP = $this->strTitleP;
      $this->view->strTitleS = $this->strTitleS;
      
      $this->view->arrFilterFields = array(
        'Cidade' => array(
          'name' => 'ds_cidade', 
          'type' => 'text', 
          'width' => '250', 
          'maxlength' => '120'
        ),
        'Sigla Estado' => array(
          'name' => 'ds_sigla', 
          'type' => 'text', 
          'width' => '50', 
          'maxlength' => '2'
        ),
      );
      
      $this->view->arrTitleList = array(
        'Cidade',
        'Estado',
        'Status'
      );
      
      $this->view->intAtivo = Application_Model_Cidades::IND_ATIVO;
      
      $objDaoCidades = new Application_Model_Cidades();
      $objFilter = new Zend_Filter_StripTags();
      
      $strDsSiglaEstado = '';
      $strDsCidade = '';
      if($this->_request->isPost()){
        $strDsSiglaEstado = $objFilter->filter($this->_request->getPost('ds_sigla'));      
        $strDsCidade = $objFilter->filter($this->_request->getPost('ds_cidade'));
      }
      
      $arrResult = $objDaoCidades->getByCidadeEEstado($strDsCidade, $strDsSiglaEstado);
      $arrList = array();
      if(count($arrResult) > 0){
        foreach($arrResult as $arrData){          
          $arrList['id']          = $arrData['idCidade'];
          $arrList['nome']        = $arrData['ds_cidade'];
          $arrList['sigla']       = $arrData['ds_sigla'];
          $arrList['status']      = $arrData['ds_situacao'];
          
          $arrRes[] = $arrList;
        }
      } 
      
      Zend_Paginator::setDefaultScrollingStyle('Sliding');
      Zend_View_Helper_PaginationControl::setDefaultViewPartial('partial/controles_paginador.phtml');
      $paginator = Zend_Paginator::factory($arrRes);
  
      //pagina atual. Se nao vier nenhuma pagina, mostra a primeira
      $currentPage = $this->_getParam('page', 1);
      $paginator->setCurrentPageNumber($currentPage)->setItemCountPerPage(Zend_Registry::getInstance()->config->default->result->per->page);
        
      //manda para a viewer
      $this->view->paginator = $paginator;
      
      //Core_Commons::debugging($arrRes);
      $this->view->objList = $arrRes;
    }
    
    /**
     * Action que adicionará um novo estado.
     */
    public function addAction(){
      $this->view->strTitleP = $this->strTitleP;
      $this->view->strTitleS = $this->strTitleS;
      
      $objDaoModel = new Application_Model_Cidades();
      $arrColunas = $objDaoModel->getColunas();
            
      $this->view->arrColunas = $arrColunas;
      $this->view->strDaoModel = 'Estados';
      $this->view->strValue = 'idEstado';
      $this->view->strLabel = 'ds_estado';
      
      if($this->_request->isPost()){
        $this->view->request = $this->_request->getPost();
        try{
          if($objDaoModel->salvar())
            Core_FlashMessage::addMessage('Cidade inserida com sucesso', '1');
          else
            Core_FlashMessage::addMessage('Erro desconhecido ao Inserir a cidade no sistema', '4');
            
          $this->_redirect($this->view->controllerName . '/list');
        }
        catch(Exception $objException){
          Core_FlashMessage::addMessage($objException->getMessage(), $objException->getCode());
        }  
      }
    }
    
    /**
     * Action que atualizará um pais específica
     */
    public function editarAction(){
      $this->view->strTitleP = $this->strTitleP;
      $this->view->strTitleS = $this->strTitleS;
      
      $objDaoModel = new Application_Model_Cidades();
      $arrColunas = $objDaoModel->getColunas();
      
      $this->view->arrColunas = $arrColunas;
      $this->view->strDaoModel = 'Estados';
      $this->view->strValue = 'idEstado';
      $this->view->strLabel = 'ds_estado';
      $this->view->request = $objDaoModel->getById($this->_request->getParam('fl'));
      
      if($this->_request->isPost()){
        try{
          if($objDaoModel->salvar($this->_request->getPost('idCidade')))
            Core_FlashMessage::addMessage('Cidade atualizada com sucesso', '1');
          else
            Core_FlashMessage::addMessage('Erro desconhecido ao atualizar a cidade!', '4');
          
          $this->_redirect($this->view->controllerName . '/list');            
        }
        catch(Exception $objException){
          Core_FlashMessage::addMessage($objException->getMessage(), $objException->getCode());
        }
      }
    }
    
    /**
     * Action que atualizará uma unidade de ensino específica, tratando como exclusão
     */
    public function excluirAction(){
      $this->view->strTitleP = $this->strTitleP;
      $this->view->strTitleS = $this->strTitleS;
      
      $this->view->strAct = $this->view->controllerName . '/excluir';
      $this->view->strRedirect = $this->view->controllerName . '/list';
      $this->view->strIcon = $this->view->imagens . '/warning.png';
      $this->view->intId = $this->_request->getParam('fl') ;
      
      if($this->_request->isPost()){    
        $this->view->intId = $this->_request->getPost('fl');  
        try{
//Zend_Debug::dump($this->_request->getPost('id'));
          
          $objDaoModel = new Application_Model_Cidades();
          if($objDaoModel->excluir($this->_request->getPost('id')))
            Core_FlashMessage::addMessage($this->strTitleS . ' excluída com sucesso!', '1');        
          else
            Core_FlashMessage::addMessage('Não foi possível excluir a ' . $this->strTitleS . '!', '2');
              
          $this->_redirect($this->view->controllerName . '/list');      
        }
        catch(Exception $objException){
          Core_FlashMessage::addMessage($objException->getMessage(), '3');
          $this->_redirect($this->view->controllerName . '/list');
        }                                     
      }
    }
    
    /**
     * Carrega os dados dos logradouros e envia para o combobox
     */
    public function carregaCidadesAjaxAction(){
      $objFilter = new Zend_Filter_StripTags();
      $intCep = $objFilter->filter($this->_request->getParam('ds_cep'));
      $intCep = preg_replace('/[\-\.]/', '', $intCep);
      
      $objDaoCidades = new Application_Model_Cidades();
      $arrCidades = $objDaoCidades->getByCep($intCep);
      
      $this->view->arrCidades = $arrCidades;
      $this->_helper->viewRenderer('input-cidade-ajax');
      
      $this->_helper->layout->disableLayout();      
    }
  }